// 默认基础链接
const BASE_URL = 'http://localhost:8088';
// 是否刷新token
let is_refreshToken = false;
// 请求方法集合
const METHOD_ARRAY = ['GET', 'POST', 'PUT', 'DELETE'];
// request请求
const request = (url, method, params, set = {}) => {

	/** 
	 * @param resolve 接受
	 * @param reject 拒绝
	 */
	// 返回新的异步构造函数
	return new Promise((resolve, reject) => {
		// 获取本地缓存中的user-info
		let token = uni.getStorageSync('token');
		let data = {
			url: url,
			data: params,
			method: method,
		};
		// 请求头
		if (token) {
			let header = {
				"token": token,
			}
			data.header = header;
		}
		// 调用uni-app的request请求
		uni.request({
			...data,
			success: (result) => {
				if (result.statusCode !== 200) {
					reject(result.data);
				} else if (result.data.code == 401) {
					// 移除本地缓存
					uni.removeStorageSync('token');
					// 打开登录页
					uni.reLaunch({
						url: '/pages/login/login'
					})
				} else
					// 请求成功
					if (result.statusCode == 200) {
						// 接口正常访问 返回请求数据
						resolve(result.data)
					}
			},
			fail: (error) => {
				error_toast(error);
				return reject(error);
			}
		})
	})
}

class Api {
	// 构造函数
	constructor(url, param) {
		if (url.indexOf('http') == -1) {
			this.urlAll = BASE_URL + url;
		} else {
			this.urlAll = url;
		}
		this.url = url;
		this.method = param ? param.method : undefined;
		if (this.method) {
			this[this.method] = params => {
				return request(this.urlAll, this.method.toUpperCase(), params, param)
			}
		} else {
			for (let i = 0; i < METHOD_ARRAY.length; i++) {
				this[METHOD_ARRAY[i].toLowerCase()] = params => {
					return request(this.urlAll, METHOD_ARRAY[i], params, param)
				}
			}
		}
	}
}

// 错误信息汇总
let error_toast = (error) => {
	if (error.errMsg == 'request:fail abort statusCode:-1 Failed to connect to /1.180.39.10:3080') {
		uni.showToast({
			title: '服务器升级中，请稍后再试',
			icon: 'none'
		})
	} else if (error.errMsg == 'request:fail') {
		uni.showToast({
			title: '请求失败，请检查您的网络',
			icon: 'none'
		})
	} else if (error.errMsg == 'request:fail timeout') {
		uni.showToast({
			title: '请求超时，请稍后重试',
			icon: 'none'
		})
	} else {
		uni.showToast({
			title: error.errMsg || '请求失败',
			icon: 'none'
		})
	}
}

// ajax请求 请求接口写在这里
const ajax = {
	baseUrl: BASE_URL, // 基础URL
	login: new Api('/user/login', {
		content_type: 'application/json'
	}), // 登录
	registry: new Api('/user/register', {
		content_type: 'application/json'
	}), // 注册
	getShopSortList: new Api('/category/list'), // 获取咖啡分类接口
	getCoffeeShop: new Api('/coffee/list'), // 根据分类获取咖啡信息
	getCouponList: new Api('/coupon/list'), // 获取优惠券信息
	delCoupon: new Api('/coupon/delete'), // 删除优惠卷信息
	getOrderList: new Api('/order/listOrder'), // 获取订单列表
	postOrder: new Api('/order/make', {
		content_type: 'application/json'
	}), // 生成订单
	removeOrder: new Api('/order/remove'), // 取消订单
	getOrderDetail: new Api('/order/listDetail'), // 查询订单信息
	getShopCartList: new Api('/shoppingCart/list'), // 获取购物车列表
	postShopCart: new Api('/shoppingCart/add', {
		content_type: 'application/json'
	}), // 新增购物车
	removeShopCart: new Api('/shoppingCart/remove'), // 删除购物车信息
	updateShopCart: new Api('/shoppingCart/update'), // 更新购物车
	setOrderStatus: new Api('/order/status', {
		content_type: 'application/json'
	}), // 修改订单状态
}

export default ajax;
